home *** CD-ROM | disk | FTP | other *** search
/ PCGUIA 127 / PC Guia 127.iso / Software / Produtividade / OpenOffice.org 2.0.1 / openofficeorg1.cab / FilesModul.xba < prev    next >
Extensible Markup Language  |  2005-05-13  |  29KB  |  822 lines

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
  3. <script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit
  4.  
  5. Public AbsTemplateFound as Integer
  6. Public AbsDocuFound as Integer
  7. Public oLogDocument as Object
  8. Public oLogTable as Object
  9. Public bLogExists as Boolean
  10. Public sComment as String
  11. Public MaxCollectIndex as Integer
  12. Public bInsertRow as Boolean
  13. Public sLogUrl as String
  14. Public sCurPassWord as String
  15. Public FileCount as Integer
  16. Public XMLTemplateCount as Integer
  17. Public PathCollection(7,3) as String
  18. Public bIsFirstLogTable as Boolean
  19. Public bFilterTracerIsinsideTable as Boolean
  20.  
  21.  
  22. Function ReadCollectionPaths(FilesList() as String, sFilterName() as String)
  23. Dim FilterIndex as Integer
  24. Dim bRecursive as Boolean
  25. Dim SearchDir as String
  26. Dim i as Integer
  27. Dim n as Integer
  28. Dim a as Integer
  29. Dim s as Integer
  30. Dim t as Integer
  31. Dim sFileContent() as String
  32. Dim NewList(0,1) as String
  33. Dim Index as Integer
  34. Dim CurFileName as String
  35. Dim CurExtension as String
  36. Dim CurFileContent as String
  37. Dim XMLTemplateContentList() as String
  38. Dim bIsTemplatePath as Boolean
  39. Dim MaxIndex as Integer
  40. Dim NewContentList() as String
  41. Dim XMLTemplateContentString as String
  42. Dim ApplIndex as Integer
  43. Dim bAssignFileName as Boolean
  44.     oDocInfo = CreateUnoService("com.sun.star.document.DocumentProperties")
  45.     bInterruptSearch = False
  46.     For i = 0 To MaxCollectIndex
  47.         SearchDir = PathCollection(i,0)
  48.         bRecursive = PathCollection(i,1)
  49.         sFileContent() = ArrayoutofString(PathCollection(i,2), "|")
  50.         NewList() = ReadDirectories(SearchDir, bRecursive, False, False, sFileContent(), "")
  51.         If InterruptProcess Then
  52.             ReadCollectionPaths() = False
  53.             Exit Function
  54.         End If
  55.         If Ubound(NewList()) > -1 Then
  56.             bIsTemplatePath = FieldInList("vor", sFileContent)
  57.             If bIsTemplatePath Then
  58.                 XMLTemplateContentString = PathCollection(i,3)
  59.                 XMLTemplateContentList() = ArrayoutofString(XMLTemplateContentString, "|")
  60.                 If Ubound(XMLTemplateContentList()) > -1 Then
  61.                     MaxIndex = Ubound(NewList())
  62.                     ReDim Preserve NewList(MaxIndex, 1) as String
  63.                     ReDim Preserve NewContentList(MaxIndex) as String
  64.                     a = -1
  65.                     For n = 0 To MaxIndex
  66.                         bAssignFileName = True
  67.                         If InterruptProcess() Then
  68.                             ReadCollectionPaths() = False
  69.                             Exit Function
  70.                         End If
  71.                         CurFileContent = ""
  72.                         CurFileName = NewList(n,0)                                                    
  73.                         If (FieldInList(NewList(n,1), XMLTemplateList())) Then
  74.                             CurFileContent = GetRealFileContent(oDocInfo, CurFileName)
  75.                             t = SearchArrayforPartString(CurFileContent, XMLTemplateContentList())
  76.                              bAssignFileName = (t > -1)
  77.                              If bAssignFileName Then
  78.                                  CurFileContent = XMLTemplateContentList(t)
  79.                              End If
  80.                             NewList(n,1) = CurFileContent
  81.                         End If
  82.                         CurExtension = NewList(n,1)
  83.                         If bAssignFileName Then
  84.                             If a < n Then
  85.                                 a = a + 1
  86.                                 NewList(a,0) = CurFileName
  87.                                 NewList(a,1) = CurExtension
  88.                                 If CurFileContent = "" Then
  89.                                     CurFileContent = CurExtension
  90.                                 End If
  91.                                 ApplIndex = GetApplicationIndex(CurFileContent, sFiltername())
  92.                                 NewContentList(a) = ApplIndex
  93.                             End If
  94.                         End If
  95.                     Next n
  96.                     If a < MaxIndex And a > -1 Then
  97.                         ReDim Preserve NewList(a, 1) as String
  98.                     End If
  99.                     If a > -1 Then
  100.                         AddListtoFilesList(FilesList(), NewList(), NewContentList())
  101.                     End If
  102.                 End If
  103.             Else
  104.                 MaxIndex = Ubound(NewList())
  105.                 ReDim Preserve NewContentList(MaxIndex) as String
  106.                 For s = 0 To MaxIndex
  107.                     CurExtension = NewList(s,1)
  108.                     NewContentList(s) = GetApplicationIndex(CurExtension, sFiltername())
  109.                 Next s
  110.                 AddListtoFilesList(FilesList(), NewList(), NewContentList())
  111.             End If
  112.         End If
  113.     Next i
  114.     ReadCollectionPaths() = Ubound(FilesList()) > -1
  115. End Function
  116.  
  117.  
  118. Function GetApplicationIndex(CurFileContent as String, sFilterName() as String) as Integer
  119. Dim Index as Integer
  120. Dim i as Integer
  121.     Index = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
  122.     If Index >= MaxApplCount Then
  123.         Index = Index - MaxApplCount
  124.     End If
  125.     For i = 0 To MaxApplCount - 1
  126.         If Applications(i, SBAPPLKEY) = Index Then
  127.             GetApplicationIndex() = i
  128.             Exit Function
  129.         End If
  130.     Next i
  131.     GetApplicationIndex() = - 1
  132. End Function
  133.  
  134.  
  135. Function InterruptProcess() as Boolean
  136.     If bCancelTask Or RetValue = 0 Then
  137.         bConversionIsRunning = False
  138.         InterruptProcess() = True
  139.         Exit Function
  140.     End if        
  141.     InterruptProcess() = False
  142. End Function
  143.  
  144.  
  145. Sub AddCollectionPath(ApplIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
  146.     MaxCollectIndex = MaxCollectIndex + 1
  147.     PathCollection(MaxCollectIndex, 0) = Applications(ApplIndex, DocIndex)
  148.     PathCollection(MaxCollectIndex, 1) = Applications(ApplIndex, RecursiveIndex)
  149.     AddFilterNameToPathItem(ApplIndex, MaxCollectIndex, sFiltername(), DistIndex)
  150. End Sub
  151.  
  152.  
  153. Function SetExtension(LocExtension) as String
  154.     if (Instr(LocExtension, "vnd.sun.xml.impress")) > 0 then
  155.         SetExtension() = "vor|sti|std"
  156.     elseif (Instr(LocExtension, "vnd.sun.xml.writer")) > 0 then
  157.         SetExtension() = "vor|stw"    
  158.     elseif (Instr(LocExtension, "vnd.sun.xml.calc")) > 0 then
  159.         SetExtension() = "vor|stc"
  160.     elseif (Instr(LocExtension, "vnd.sun.xml.draw")) > 0 then
  161.         SetExtension() = "vor|std|sti"    
  162.     endif
  163. End Function
  164.  
  165. Sub AddFilterNameToPathItem(ApplIndex as Integer, CollectIndex as Integer, sFiltername() as String, DistIndex as Integer)
  166. Dim iKey as Integer
  167. Dim CurListString as String
  168. Dim LocExtension as String
  169. Dim LocContentString as String
  170. Dim LocXMLTemplateContent as String
  171.     iKey = Applications(ApplIndex, SBAPPLKEY)
  172.     CurListString = PathCollection(CollectIndex, 2)
  173.     LocExtension = sFilterName(iKey +DistIndex, 0)
  174.     If Len(LocExtension) > SBMAXEXTENSIONLENGTH Then             ' 7 == Length of two extensions like 'sda|sdd
  175.         LocExtension = SetExtension(LocExtension)
  176.         LocContentString = sFilterName(iKey +DistIndex, 0)
  177.         LocContentString = ReplaceString(LocContentString, "|", ";")
  178.         LocXMLTemplateContent = PathCollection(CollectIndex, 3)
  179.         If LocXMLTemplateContent = "" Then
  180.             LocXMLTemplateContent = LocContentString
  181.         Else
  182.             LocXMLTemplateContent = LocXMLTemplateContent & "|" & LocContentString
  183.         End If
  184.         PathCollection(CollectIndex, 3) = LocXMLTemplateContent
  185.     End If
  186.     If CurListString = "" Then
  187.         PathCollection(CollectIndex, 2) = LocExtension
  188.     Else
  189.         If Instr(CurListString, LocExtension) = 0 Then
  190.             PathCollection(CollectIndex, 2) = CurListString & "|" & LocExtension
  191.         End If
  192.     End If
  193. End Sub
  194.  
  195.  
  196. Sub CheckIfToAddPathToCollection(ApplIndex as Integer, bDoConvertIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
  197. Dim CollectIndex as Integer
  198. Dim bCheckDocuType as Boolean
  199.     bCheckDocuType = Applications(ApplIndex, bDoConvertIndex)
  200.     If bCheckDocuType Then
  201.         CollectIndex = GetIndexInMultiArray(PathCollection(), Applications(ApplIndex,DocIndex), 0)
  202.         If (CollectIndex >-1) Then
  203.             If Applications(ApplIndex, RecursiveIndex) <> PathCollection(CollectIndex, 1) Then
  204.                 AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
  205.             Else
  206.                 AddFilterNameToPathItem(ApplIndex, CollectIndex, sFilterName(), DistIndex)
  207.             End If
  208.         Else
  209.             AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
  210.         End If
  211.     End If
  212. End Sub
  213.  
  214.  
  215. Sub CollectPaths(sFiltername() as String)
  216. Dim i as Integer
  217. Dim    XMLTemplateContentString as String
  218.     MaxCollectIndex = -1
  219.     For i = 0 To ApplCount-1
  220.         CheckIfToAddPathToCollection(i, SBDOCCONVERT, SBDOCSOURCE, SBDOCRECURSIVE, sFilterName(), 0)
  221.     Next i
  222.     XMLTemplateCount = 0
  223.     XMLTemplateContentString = ""
  224.     For i = 0 To ApplCount-1
  225.         If WizardMode = SBXMLMODE Then
  226.             XMLTemplateCount = XMLTemplateCount + 1
  227.         End If
  228.         CheckIfToAddPathToCollection(i, SBTEMPLCONVERT, SBTEMPLSOURCE, SBTEMPLRECURSIVE, sFilterName(), MaxApplCount)
  229.     Next i
  230. End Sub
  231.  
  232.  
  233. Sub ConvertAllDocuments(sFilterName() as String)
  234. Dim FileProperties(1) as new com.sun.star.beans.PropertyValue
  235. Dim PWFileProperties(2) as New com.sun.star.beans.PropertyValue
  236. Dim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue
  237. Dim OpenProperties(4) as new com.sun.star.beans.PropertyValue
  238. Dim    oInteractionHandler as Object
  239. Dim InteractionTypes(0) as Long
  240. Dim FilesList(0,2) as String
  241. Dim sViewPath as String
  242. Dim i as Integer
  243. Dim FilterIndex as Integer
  244. Dim sSourceUrl as String
  245. Dim CurFilename as String
  246. Dim oDocument as Object
  247. Dim sExtension as String
  248. Dim OldExtension as String
  249. Dim CurFound as Integer
  250. Dim TotFound as Integer
  251. Dim TargetStemDir as String
  252. Dim SourceStemDir as String
  253. Dim TargetDir as String
  254. Dim sTargetUrl as String
  255. Dim CurFilterName as String
  256. Dim ApplIndex as Integer
  257. Dim Index as Integer
  258. Dim bIsDocument as Boolean
  259. Dim bDoSave as Boolean
  260. Dim sCurFileExists as String
  261. Dim MaxFileIndex as Integer
  262. Dim bContainsBasicMacro as Boolean
  263. Dim bIsPassWordProtected as Boolean
  264. Dim iOverwrite as Integer
  265. Dim sMimeTypeorExtension as String
  266. Dim sPrevMimeTypeorExtension as String
  267.     bConversionisrunning = True
  268.     InteractionTypes(0) = com.sun.star.task.PasswordRequestMode.PASSWORD_REENTER
  269.     oInteractionHandler = createUnoService("com.sun.star.task.InteractionHandler")
  270.     oInteractionHandler.initialize(InteractionTypes())
  271.     iGeneralOverwrite = SBOVERWRITEUNDEFINED
  272.     bConversionIsRunning = True
  273.     bLogExists = false
  274.     AbsTemplateFound = 0
  275.     AbsDocuFound = 0
  276.     CollectPaths(sFiltername())
  277.     If Not ReadCollectionPaths(FilesList(), sFilterName()) Then
  278.         TotFound = 0
  279.         SetProgressDisplay(0)
  280.         bConversionisrunning = false
  281.         FinalizeDialogButtons()    
  282.         Exit Sub
  283.     End If
  284.     TotFound = Ubound(FilesList()) + 1             
  285.     If FilesList(0,0) = "" Then                    ' Querying the number of fields in a multidimensionl Array is unsecure
  286.         TotFound = 0                            ' because it will return the value 0 (and not -1) even when the Array is empty
  287.         SetProgressDisplay(0)
  288.     End If
  289.     BubbleSortList(FilesList(), true)
  290.     If TotFound > 0 Then
  291.         CreateLogDocument(OpenProperties())
  292.         InitializeProgressPage(ImportDialog)
  293.         OpenProperties(0).Name = "Hidden"
  294.         OpenProperties(0).Value = True
  295.         OpenProperties(1).Name = "AsTemplate"
  296.         OpenProperties(1).Value = False
  297.         OpenProperties(2).Name = "MacroExecutionMode"
  298.         OpenProperties(2).Value = com.sun.star.document.MacroExecMode.NEVER_EXECUTE    
  299.         OpenProperties(3).Name = "UpdateDocMode"
  300.         OpenProperties(3).Value = com.sun.star.document.UpdateDocMode.NO_UPDATE
  301.         OpenProperties(4).Name = "InteractionHandler"
  302.         OpenProperties(4).Value = oInteractionHandler
  303.         MaxFileIndex = Ubound(FilesList(),1)
  304.         FileCount = 0
  305.         For i = 0 To MaxFileIndex
  306.             sComment = ""
  307.             If InterruptProcess() Then
  308.                 Exit For
  309.             End If
  310.             bDoSave = True
  311.             sSourceUrl = FilesList(i,0)
  312.             sPrevMimeTypeorExtension = sMimeTypeorExtension
  313.             sMimeTypeorExtension = FilesList(i,1)
  314.             CurFiltername =    GetFilterName(sMimeTypeorExtension, sFilterName(), sExtension, FilterIndex)
  315.             ApplIndex = FilesList(i,2)
  316.             If sMimeTypeorExtension <> sPrevMimeTypeorExtension Then
  317.                 CreateLogTable(ApplIndex, sMimeTypeOrExtension, sFiltername()
  318.             End If
  319.             If ApplIndex > Ubound(Applications) or (ApplIndex < 0) Then
  320.                 Msgbox "Applicationindex out of bounds:" & sSourcUrl
  321.             End If
  322.             sViewPath = ConvertFromUrl(sSourceUrl)     ' CutPathView(sSourceUrl, 70)
  323.             ImportDialog.LabelCurDocument.Label = Str(i+1) & "/" & MaxFileIndex + 1 & "  (" & sViewPath & ")"
  324.             Select Case lcase(sExtension)
  325.                 Case "odt", "ods", "odp", "odg", "odm", "odf" 
  326.                     SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), "/")
  327.                     TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), "/")
  328.                 Case Else                                 ' Templates and Helper-Applications remain
  329.                     SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), "/")
  330.                     TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), "/")
  331.             End Select
  332.             sTargetUrl = ReplaceString(sSourceUrl, TargetStemDir, SourceStemDir)
  333.             CurFilename = GetFileNameWithoutExtension(sTargetUrl, "/")
  334.             OldExtension = GetFileNameExtension(sTargetUrl)
  335.             sTargetUrl = RTrimStr(sTargetUrl, OldExtension)
  336.             sTargetUrl = sTargetUrl & sExtension
  337.             TargetDir = RTrimStr(sTargetUrl, CurFilename & "." & sExtension)
  338.             If (oUcb.Exists(sTargetUrl)) Then
  339.                 If (iGeneralOverwrite <> SBOVERWRITEALWAYS) Then
  340.                     If (iGeneralOverwrite = SBOVERWRITEUNDEFINED) Then
  341.                         ShowOverwriteAllDialog(sTargetUrl, sTitle)
  342.                         bDoSave = (iGeneralOverwrite = SBOVERWRITEQUERY) Or (iGeneralOverwrite = SBOVERWRITEALWAYS)
  343.                     Elseif iGeneralOverwrite = SBOVERWRITENEVER Then
  344.                         bDoSave = False                    
  345.                     ElseIf ((iGeneralOverWrite = SBOVERWRITEQUERY) OR (iGeneralOverwrite = SBOVERWRITECANCEL)) Then
  346.                         ' Todo: According to AS there might come a new feature that storeasUrl could possibly rise a UI dialog. 
  347.                         ' In this case my own UI becomes obsolete
  348.                         sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(sTargetUrl), "<1>")
  349.                         sCurFileExists = ReplaceString(sCurFileExists, chr(13), "<CR>")
  350.                         iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle)
  351.                         Select Case iOverWrite
  352.                             Case 1    ' OK
  353.                                 ' In the FileProperty-Bean this is already default
  354.                                 bDoSave = True
  355.                             Case 2     ' Abort
  356.                                 CancelTask(False)
  357.                                 bDoSave = False
  358.                             Case 7     ' No
  359.                                 bDoSave = False
  360.                         End Select
  361.                     End If
  362.                 End If
  363.             End If
  364.             If bDoSave Then
  365.                 If Not oUcb.Exists(TargetDir) Then
  366.                     bDoSave = CreateFolder(TargetDir)
  367.                 End If
  368.                 If bDoSave Then
  369.                     oDocument = StarDesktop.LoadComponentFromURL(sSourceUrl, "_default", 0, OpenProperties())
  370.                     If Not IsNull(oDocument) Then
  371.                         InsertSourceUrlToLogDocument(sSourceUrl, "")
  372.                         bIsPassWordProtected = CheckPassWordProtection(oDocument)
  373.                         CheckIfMacroExists(oDocument.BasicLibraries, sComment)
  374.                         On Local Error Goto NOSAVING
  375.                         If bIsPassWordProtected Then
  376.                             PWFileProperties(0).Name = "FilterName"
  377.                             PWFileProperties(0).Value = CurFilterName
  378.                             PWFileProperties(1).Name = "Overwrite"
  379.                             PWFileProperties(1).Value = True
  380.                             PWFileProperties(2).Name = "Password"
  381.                             PWFileProperties(2).Value = sCurPassWord
  382.                             oDocument.StoreAsUrl(sTargetUrl, PWFileProperties())
  383.                         Else
  384.                             FileProperties(0).Name = "FilterName"
  385.                             FileProperties(0).Value = CurFilterName
  386.                             FileProperties(1).Name = "Overwrite"
  387.                             FileProperties(1).Value = True
  388.                             oDocument.StoreAsUrl(sTargetUrl,FileProperties())
  389.                         End If
  390.                         ' Todo: Make sure that an errorbox pops up when saving fails
  391.                         NOSAVING:
  392.                         If Err <> 0 Then
  393.                             sCurcouldnotsaveDocument = ReplaceString(scouldnotsaveDocument, ConvertFromUrl(sTargetUrl), "<1>")
  394.                             sComment = ConcatComment(sComment, sCurCouldnotsaveDocument)
  395.                             Resume LETSGO
  396.                             LETSGO:
  397.                         Else
  398.                             FileCount = FileCount + 1
  399.                         End If
  400.                         oDocument.Dispose()
  401.                         InsertTargetUrlToLogDocument(sTargetUrl, sComment, ApplIndex)
  402.                     Else
  403.                         sCurcouldnotopenDocument = ReplaceString(scouldnotopenDocument, ConvertFromUrl(sSourceUrl), "<1>")
  404.                         sComment = ConcatComment(sComment, sCurCouldnotopenDocument)
  405.                         InsertSourceUrlToLogDocument(sSourceUrl, sComment)
  406.                     End If
  407.                 End If
  408.             End If
  409.         Next i
  410.     End If
  411.     AddLogStatistics()
  412.     FinalizeDialogButtons()
  413.     bConversionIsRunning = False
  414.     Exit Sub
  415. RTError:
  416.     Msgbox sRTErrorDesc, 16, sRTErrorHeader
  417. End Sub
  418.  
  419.  
  420.  
  421. Sub AddListtoFilesList(FirstList(), SecList(), NewContentList() as String)
  422. Dim sLocExtension as String
  423. Dim FirstStart as Integer
  424. Dim FirstEnd as Integer
  425. Dim i as Integer
  426. Dim s as Integer
  427.     If FirstList(0,0) = "" Then
  428.         FirstStart = Ubound(FirstList(),1)
  429.     Else
  430.         FirstStart = Ubound(FirstList(),1) + 1
  431.     End If
  432.     FirstEnd = FirstStart + Ubound(SecList(),1)
  433.     ReDim Preserve FirstList(FirstEnd,2)
  434.     s = 0
  435.     For i = FirstStart To FirstEnd
  436.         FirstList(i,0) = SecList(s,0)
  437.         FirstList(i,1) = SecList(s,1)
  438.         sLocExtension = lcase(FirstList(i,1))
  439.         Select Case sLocExtension
  440.             Case "sdw", "sdc", "sda", "sdd", "smf", "sgl", "doc", "xls", "ppt", "sxi" , "sxw" , "sxd" , "sxg" , "sxm" , "sxc" , "pps"
  441.                 AbsDocuFound = AbsDocuFound + 1
  442.             Case else
  443.                 AbsTemplateFound = AbsTemplateFound + 1
  444.         End Select
  445.         FirstList(i,2) = CStr(NewContentList(s))
  446.         s = s + 1
  447.     Next i
  448.     SetProgressDisplay(Ubound(FirstList()) + 1)
  449. End Sub
  450.  
  451.  
  452.  
  453. Function GetTargetTemplatePath(Index as Integer)
  454.     Select Case WizardMode
  455.         Case SBMICROSOFTMODE
  456.             GetTargetTemplatePath() = SOTemplatePath & "/" & sTemplateGroupName
  457.         Case SBXMLMODE
  458.             If Index = 3 Then
  459.                 ' Helper Application
  460.                 GetTargetTemplatePath = SOWorkPath
  461.             Else
  462.                 GetTargetTemplatePath = SOTemplatePath
  463.             End If
  464.     End Select
  465. End Function
  466.  
  467.  
  468. ' Retrieves the second value for a next to 'SearchString' in
  469. ' a two-dimensional string-Array
  470. Function GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String
  471. Dim i as Integer
  472. Dim MaxIndex as Integer
  473. Dim sLocFilterlist() as String
  474.     For i = 0 To Ubound(sFiltername(),1)
  475.         If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) <> 0 Then
  476.             sLocFilterList() = ArrayoutofString(sFiltername(i,0),"|", MaxIndex)
  477.             If MaxIndex = 0 Then
  478.                 sExtension = sFiltername(i,2)
  479.                 GetFilterName = sFilterName(i,1)
  480.             Else
  481.                 Dim b as Integer
  482.                 Dim sLocExtensionList() as String
  483.                 b =    SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList())
  484.                 sLocFilterList() = ArrayoutofString(sFiltername(i,1),"|", MaxIndex)
  485.                 GetFilterName = sLocFilterList(b)
  486.                 sLocExtensionList() = ArrayoutofString(sFilterName(i,2), "|", MaxIndex)
  487.                 sExtension = sLocExtensionList(b)
  488.             End If
  489.             Exit For
  490.         End If
  491.     Next
  492.     FilterIndex = i
  493. End Function
  494.  
  495.  
  496. Function SearchArrayforPartString(SearchString as String, LocList()) as Integer
  497. Dim i as Integer
  498. Dim a as Integer
  499. Dim StringList() as String
  500.     For i = Lbound(LocList(),1) to Ubound(LocList(),1)
  501.         StringList() = ArrayoutofString(LocList(i), "|")
  502.         For a = 0 To Ubound(StringList())
  503.             If (Instr(1, SearchString, StringList(a)) <> 0) Then
  504.                 SearchArrayForPartString() = i
  505.                 Exit Function
  506.             End If
  507.         Next a
  508.     Next i
  509.     SearchArrayForPartString() = -1    
  510. End Function
  511.  
  512.  
  513. Sub CreateLogTable(ApplIndex as Integer, CurFileContent as String, sFilterName() as String)
  514. Dim oLogCursor as Object
  515. Dim oLogRows as Object
  516. Dim FilterIndex as Integer
  517. Dim sDocumentType as String
  518. Dim oTextCursor
  519. Dim oCell
  520.     If Not bLogExists Then
  521.         Exit Sub
  522.     End If 
  523.     bFilterTracerIsinsideTable = False
  524.     FilterIndex = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
  525.     sDocumentType = sFiltername(FilterIndex,3)
  526.     oLogCursor = oLogDocument.Text.createTextCursor()
  527.     oLogCursor.GotoEnd(False)
  528.     If Not bIsFirstLogTable Then
  529.         oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
  530.     Else
  531.         bisFirstLogTable = False
  532.     End If
  533.     oLogCursor.HyperLinkURL = ""
  534.     oLogCursor.HyperLinkName = ""
  535.     oLogCursor.HyperLinkTarget = ""
  536.     oLogCursor.ParaStyleName = "Heading 1"
  537.     oLogCursor.setString(sDocumentType)
  538.     If WizardMode = SBMICROSOFTMODE Then
  539.         If bFilterTracingAvailable Then
  540.             If bMSApplFilterTracingAvailable(ApplIndex) Then
  541.                 Dim CurFilterTracingPath as String
  542.                 CurFilterTracingPath = FilterTracingLogPath(ApplIndex)
  543.                 bFilterTracerIsinsideTable = (bTakeOverTargetName(ApplIndex) Or bTakeOverPathName(ApplIndex))
  544.                 If Not bFilterTracerIsinsideTable Then
  545.                     oLogCursor.CollapseToEnd()
  546.                     oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
  547.                     InsertCommandButtonatViewCursor(oLogDocument, oLogCursor, CurFilterTracingPath)
  548.                 End If
  549.             End If
  550.         End If
  551.     End If
  552.     oLogCursor.CollapsetoEnd()
  553.     oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
  554.     oLogTable =  oLogDocument.CreateInstance("com.sun.star.text.TextTable")
  555.     oLogTable.RepeatHeadline = true
  556.     If bFilterTracerIsinsideTable Then
  557.         oLogTable.initialize(2,3)
  558.     End If
  559.     oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True)
  560.     oTextCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor()
  561.     oTextCursor.SetString(sSourceDocuments)    
  562.     oTextCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor()
  563.     oTextCursor.SetString(sTargetDocuments)
  564.     If bFilterTracerIsinsideTable Then
  565.         oTextCursor = oLogTable.GetCellbyPosition(2,0).createTextCursor()
  566.         oTextCursor.SetString("FilterTracer")
  567.     End If
  568.     bInsertRow = False
  569. End Sub
  570.  
  571.  
  572. Function GetSize(iWidth, iHeight) As New com.sun.star.awt.Size
  573. Dim aSize As New com.sun.star.awt.Size
  574.     aSize.Width = iWidth
  575.     aSize.Height = iHeight
  576.     GetSize() = aSize
  577. End Function
  578.  
  579.  
  580. Sub InsertCommandButtonatViewCursor(oLocDocument, oLocCursor, TargetUrl as String, Optional aSize)
  581. Dim oDocument
  582. Dim oController
  583. Dim oCommandButton
  584. Dim oShape
  585. Dim oDrawPage
  586. Dim oCommandControl
  587. Dim oEvent
  588. Dim oCell
  589.     oCommandButton = oLocDocument.createInstance("com.sun.star.form.component.CommandButton")
  590.     oShape = oLocDocument.CreateInstance ("com.sun.star.drawing.ControlShape")    
  591.     If IsMissing(aSize) Then
  592.         oShape.Size = GetSize(4000, 600)
  593.     End If
  594.     oCommandButton.Label = FileNameoutofPath(Targeturl)
  595.     oCommandButton.TargetFrame = "_default"
  596.     oCommandButton.ButtonType = com.sun.star.form.FormButtonType.URL
  597.     oCommandbutton.DispatchUrlInternal = True
  598.     oCommandButton.TargetURL = ConverttoUrl(TargetUrl)
  599.     oShape.Control = oCommandbutton
  600.     oLocCursor.Text.InsertTextContent(oLocCursor, oShape, True)
  601. End Sub
  602.  
  603.  
  604.  
  605. Sub CreateLogDocument(HiddenProperties())
  606. Dim OpenProperties(0) as new com.sun.star.beans.PropertyValue
  607. Dim NoArgs()
  608. Dim i as Integer
  609. Dim bLogIsThere as Boolean
  610.     If ImportDialog.chkLogfile.State = 1 Then
  611.         i = 2
  612.         OpenProperties(0).Name = "Hidden"
  613.         OpenProperties(0).Value = True
  614.         oLogDocument = StarDesktop.LoadComponentFromURL("private:factory/swriter", "_default", 4, OpenProperties())
  615.         sLogUrl = SOWorkPath & "/Logfile.odt"
  616.         Do
  617.             bLogIsThere = oUcb.Exists(sLogUrl)
  618.             If bLogIsThere Then
  619.                 If i = 2 Then
  620.                     sLogUrl = ReplaceString(sLogUrl, "/Logfile_2.odt", "/Logfile.odt")
  621.                 Else
  622.                     sLogUrl = ReplaceString(sLogUrl, "/Logfile_" & cStr(i) & ".odt", "/Logfile_" & cStr(i-1) & ".odt")
  623.                 End If
  624.                 i = i + 1
  625.             End If
  626.         Loop Until Not bLogIsThere
  627.         bLogExists = True
  628.         oLogDocument.StoreAsUrl(sLogUrl, NoArgs())
  629.     End If
  630. End Sub
  631.  
  632.  
  633. Function GetFilterTracingLogPath(sTargetUrl as String, ApplIndex) as String                
  634. Dim TargetFileName as String
  635. Dim sTargetFolder as String
  636. Dim CurFilterTracingPath as String
  637. Dim CurFilterTracingname as String
  638. Dim CurFilterFolder as String
  639.         CurFilterTracingPath = FilterTracingLogPath(ApplIndex)
  640.         If bTakeOverTargetName(ApplIndex) Then            
  641.             TargetFilename = GetFileNameWithoutextension(sTargetUrl, "/")
  642.             CurFilterFolder = DirectoryNameoutofPath(FilterTracingLogPath(ApplIndex), "/")
  643.             CurFilterTracingpath = CurFilterFolder & "/" & TargetFilename & ".log"
  644.         End If
  645.         If bTakeOverPathName(ApplIndex) Then  'Replace the Folder in the FilterTracerpath by the Folder of the targetUrl
  646.             sTargetFolder = DirectoryNameoutofPath(sTargetUrl,"/")
  647.             CurFilterTracingPath = sTargetFolder & "/" & FileNameoutofPath(CurFilterTracingPath, "/")
  648.         End If
  649.         GetFilterTracingLogPath() = CurFilterTracingPath
  650. End Function
  651.  
  652.  
  653. Sub InsertTargetUrlToLogDocument(sTargetUrl as String, sComment as String, ApplIndex as Integer)
  654. Dim oCell
  655. Dim oTextCursor
  656. Dim CurFilterTracingpath as String
  657.     If (bLogExists) And (sTargetUrl <> "") Then
  658.         If sTargetUrl <> "" Then
  659.             oCell = oLogTable.GetCellbyPosition(1,oLogTable.Rows.Count-1)
  660.             InsertCommentToLogCell(sComment, oCell)
  661.             InsertHyperLinkToLogCell(sTargetUrl, oCell)
  662.             If bFilterTracerIsinsideTable Then
  663.                 oCell = oLogTable.getCellByPosition(2, oLogTable.Rows.Count-1)
  664.                 oTextCursor = oCell.Text.CreateTextCursor()
  665.                 CurFilterTracingpath = GetFilterTracingLogPath(sTargetUrl, ApplIndex)
  666.                 InsertCommandButtonatViewCursor(oLogDocument, oTextCursor, CurFilterTracingPath)
  667.             End If
  668.             oLogDocument.Store()
  669.         End If
  670.     End If
  671. End Sub
  672.  
  673.  
  674. Sub InsertSourceUrlToLogDocument(SourceUrl as String, sComment)        '
  675. Dim oCell as Object
  676.     If bLogExists Then
  677.         If bInsertRow Then
  678.             oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1)
  679.         Else
  680.             bInsertRow = True
  681.         End If
  682.         oCell = oLogTable.GetCellbyPosition(0,oLogTable.Rows.Count-1)
  683.         InsertCommentToLogCell(sComment, oCell)
  684.         InsertHyperLinkToLogCell(SourceUrl, oCell)
  685.         oLogDocument.Store()
  686.     End If
  687. End Sub
  688.  
  689.  
  690. Sub InsertHyperLinkToLogCell(sUrl as String, oCell as Object)
  691. Dim oLogCursor as Object
  692. Dim LocFileName as String
  693.     oLogCursor = oCell.createTextCursor()
  694.     oLogCursor.CollapseToStart()
  695.     oLogCursor.HyperLinkURL = sUrl
  696.     oLogCursor.HyperLinkName = sUrl
  697.     oLogCursor.HyperLinkTarget = sUrl
  698.     LocFileName = FileNameOutOfPath(sUrl)
  699.     oCell.InsertString(oLogCursor, LocFileName,False)
  700. End Sub            
  701.  
  702.  
  703. Sub InsertCommentToLogCell(sComment as string, oCell as Object)
  704. Dim oCommentCursor as Object
  705.     If sComment <> "" Then
  706.         oCommentCursor = oCell.createTextCursor()
  707.         oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
  708.         oCell.insertString(oCommentCursor, sComment, false)
  709.     End If
  710. End Sub
  711.  
  712.  
  713. Sub AddLogStatistics()
  714. Dim oCell as Object
  715. Dim oLogCursor as Object
  716. Dim MaxRowIndex as Integer
  717.     If bLogExists Then
  718.         MaxRowIndex = oLogTable.Rows.Count
  719.         sLogSummary = ReplaceString(sLogSummary, FileCount, "<COUNT>")
  720. '        oLogTable.Rows.InsertByIndex(MaxRowIndex, 1)
  721. '        oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex)
  722. '        oLogCursor = oCell.createTextCursor()
  723. '        oCell.InsertString(oLogCursor, sLogSummary,False)
  724. '        MergeRange(oLogTable, oCell, 1)
  725.  
  726.         oLogCursor = oLogDocument.Text.CreateTextCursor
  727.         oLogCursor.gotoEnd(False)
  728.         oLogCursor.HyperLinkURL = ""
  729.         oLogCursor.HyperLinkName = ""
  730.         oLogCursor.HyperLinkTarget = ""        
  731.         oLogCursor.SetString(sLogSummary)
  732.         oLogDocument.Store()
  733.         oLogDocument.Dispose()
  734.         bLogExists = False
  735.     End If
  736. End Sub
  737.  
  738.  
  739.  
  740. Function CheckIfMacroExists(oBasicLibraries as Object, sComment as String) as Boolean
  741. Dim ModuleNames() as String
  742. Dim ModuleName as String
  743. Dim MaxLibIndex as Integer
  744. Dim MaxModuleIndex as Integer
  745. Dim bMacroExists as Boolean
  746. Dim n as Integer
  747. Dim m as Integer
  748. Dim LibName as String
  749. Dim sBasicCode as String
  750. Dim oLibrary as Object
  751.     bMacroExists = False
  752.     bMacroExists = oBasicLibraries.hasElements
  753.     If bMacroExists Then
  754.         MaxLibIndex = Ubound(oBasicLibraries.ElementNames())
  755.         For n = 0 To MaxLibIndex
  756.             LibName = oBasicLibraries.ElementNames(n)
  757.             oLibrary = oBasicLibraries.getbyName(LibName)
  758.             If oLibrary.hasElements() Then
  759.                 MaxModuleIndex = Ubound(oLibrary.ElementNames())
  760.                 For m = 0 To MaxModuleIndex
  761.                     ModuleName = oLibrary.ElementNames(m)
  762.                     sBasicCode = oLibrary.getbyName(ModuleName)
  763.                     If sBasicCode <> "" Then
  764.                         ConcatComment(sComment, sReeditMacro)
  765.                         CheckIfMacroExists() = True
  766.                         Exit Function
  767.                     End If
  768.                 Next m
  769.             End If
  770.         Next n
  771.     End If
  772.     CheckIfMacroExists() = False
  773. End Function
  774.  
  775.  
  776.  
  777. Function CheckPassWordProtection(oDocument as Object)
  778. Dim bIsPassWordProtected as Boolean
  779. Dim i as Integer
  780. Dim oArgs()
  781. Dim MaxIndex as Integer
  782. Dim sblabla as String
  783.     bIsPassWordProtected = false
  784.      oArgs() = oDocument.getArgs()
  785.      MaxIndex = Ubound(oArgs())
  786.     For i = 0 To MaxIndex
  787.         sblabla = oArgs(i).Name
  788.         If oArgs(i).Name = "Password" Then
  789.             bIsPassWordProtected = True
  790.             sCurPassWord = oArgs(i).Value
  791.             Exit For
  792.         End If
  793.     Next i
  794.     CheckPassWordProtection() = bIsPassWordProtected
  795. End Function
  796.  
  797.  
  798. Sub OpenLogDocument()
  799.  
  800.     bShowLogFile = True
  801.     ImportDialogArea.endexecute()
  802.     
  803. End Sub
  804.  
  805.  
  806. Sub MergeRange(oTable as Object, oCell as Object, MergeCount as Integer)    
  807. Dim oTableCursor as Object
  808.     oTableCursor = oTable.createCursorByCellName(oCell.CellName)
  809.     oTableCursor.goRight(MergeCount, True)
  810.     oTableCursor.mergeRange()
  811. End Sub        
  812.  
  813.  
  814. Function ConcatComment(sComment as String, AdditionalComment as String)
  815.     If sComment = "" Then
  816.         sComment = AdditionalComment
  817.     Else
  818.         sComment = sComment & chr(13) + AdditionalComment
  819.     End If                
  820.     ConcatComment = sComment
  821. End Function
  822. </script:module>